package cn.fws.meap.user.service.impl;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import cn.fws.meap.user.entity.Account;
import cn.fws.meap.user.mapper.AccountMapper;
import cn.fws.meap.utils.logBug.SysLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.fws.framework.utils.ConvertUtils;
import cn.fws.framework.utils.UUIDUtils;
import cn.fws.meap.user.mapper.AccountRecordMapper;
import cn.fws.meap.user.entity.AccountRecord;
import cn.fws.meap.user.service.IAccountRecordService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

/**
 * 账户充值消费记录 服务层实现
 * 
 * @author chenkh
 * @date 2019-03-07
 */
@Service
@Transactional
public class AccountRecordServiceImpl implements IAccountRecordService {

	@Autowired
	private AccountRecordMapper accountRecordMapper;
	@Autowired
	private AccountMapper accountMapper;

	/**
     * 查询账户充值消费记录信息
     * 
     * @param id 账户充值消费记录ID
     * @return 账户充值消费记录信息
     */
    @Override
	public AccountRecord selectById(String id) {
	    return accountRecordMapper.selectById(id);
	}
	
	/**
     * 查询账户充值消费记录列表
     * 
     * @param accountRecord 账户充值消费记录信息
     * @return 账户充值消费记录集合
     */
	@Override
	public List<AccountRecord> selectList(AccountRecord accountRecord)	{
	    return accountRecordMapper.selectList(accountRecord);
	}
	
    /**
     * 新增账户充值消费记录
     * 
     * @param accountRecord 账户充值消费记录信息
     * @return 结果
     */
    @SysLog
	@Override
	public int insert(AccountRecord accountRecord,boolean addAccountStatus) {
		System.out.println(accountRecord.toString());
		Date date = new Date();
		// 设置主键
		accountRecord.setId(UUIDUtils.getUUID());
		// 设置创建时间
		accountRecord.setPaymentTime(date);
		//查询账户余额
		System.out.println("当前用户id——————"+accountRecord.getOpenid());
		Account account1 = accountMapper.selectByOpenId(accountRecord.getOpenid());
		System.out.println("111111"+account1.toString());
		//当前账户的余额，加上问题发布的金额
		BigDecimal accBalance = account1.getAccBalance();
		System.out.println("账户余额————"+accBalance);
		BigDecimal accBalance2=accBalance.add(accountRecord.getAmount());
		//修改账户余额

		//判断当前的id=superId
		if(!addAccountStatus){
			int accountUpdate=accountMapper.updateBalance(accBalance2,accountRecord.getOpenid());
			if(accountUpdate<1){
				//如果修改未成功，手动事物回滚
				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

			}
		}

		//添加账户消费记录
		accountRecord.setBalance(addAccountStatus ? accBalance : accBalance2);


	    return accountRecordMapper.insert(accountRecord);
	}
	
	/**
     * 修改账户充值消费记录
     * 
     * @param accountRecord 账户充值消费记录信息
     * @return 结果
     */
	@Override
	public int update(AccountRecord accountRecord) {
		// 设置修改时间
		accountRecord.setUpdateTime(new java.util.Date());
	    return accountRecordMapper.update(accountRecord);
	}

	/**
     * 删除账户充值消费记录对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
	@Override
	public int deleteByIds(String ids) {
		return accountRecordMapper.deleteByIds(ConvertUtils.toStrArray(ids));
	}
	
}

